#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(int argc, char const *argv[])
{
    printf("父/main(%d)进程开始执行\n", getpid());

    int value = 100;

    pid_t pid = fork();
    if (pid == 0) // 子进程
    {
        value++;
        printf("子进程(%d)开始执行,value=%d, value的地址=%p\n", getpid(), value, &value);
    }
    else if (pid > 0)  // 父进程  pid为子进程的id
    { 
        value--;
        printf("父进程(%d)继续执行, value=%d, value的地址=%p \n", getpid(), value, &value);
    }

    // 父子进程中的value是两个不同的内存变量，各自不同的物理内存中存储自己的数据
    // 但从程序中得到的变量地址值却是一样的，说明程序操作的不是物理内存，而是虚拟内存
    // 之所有虚拟内存地址一样，是轩为fork做了父进程的内存完整拷贝来作为子进程的虚拟内存

    return 0;
}
